#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

// isPalindrome(10201) -> true
// isPalindrome(1020) -> false
// isPalindrome(-10) -> false
// 禁止把数字转换成字符串比较
bool isPalindrome(int num) {
  // int -> vector<int>
  // 10201
  // How?
  // 10201 % 10 = 1
  // (10201 / 10) % 10
  // (10201 / 10 / 10) % 10
  // (10201 / 10 / 10 / 10) % 10
  // (10201 / 10 / 10 / 10 / 10) % 10

  // 商 = 0
  // [1, 0, 2, 0, 1]
  //  ^l          ^r
  vector<int> digits;

  while (num != 0) {
    int d = num % 10;
    digits.push_back(d);
    num = num / 10;
  }
  
  auto l = digits.begin();
  auto r = digits.end() - 1;

  while (l < r) {
    if (*l != *r) {
      return false;
    }
    ++l;
    --r;
  }

  return true;
}

bool isPalindrome1(int num) {
  if (num < 0) { return false; }
  
  int left = num / 10;
  int right = num % 10;

  while (left > right) {
    // left: 1232
    // right: 1
    right = right * 10 + left % 10;
    left /= 10;
  }

  // left <= right
  // left = 12
  // right = 123w
  return (left == right) || (left == right / 10);


  // 12321
  // L     R
  // 1232  1   -- 第一步
  // 123   12  -- 第二步
  // 12    123
  // L <= R
  // L == (R/10) 是回文数字

  // 1221
  // L      R
  // 122    1
  // 12     12
  // L <= R
  // L == R 是回文数字

  // 123
  // L     R
  // 12    3
  // 1     32
  // L <= R
  // L != R L != R/10
  // 不是回文数字
}

int main(int argc, char const *argv[])
{
  /* code */
  cout << isPalindrome1(10221) << endl;
  return 0;
}
